package it.traveldream.viewer;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import it.traveldreamClient.beans.ClientManagerInterface;
import it.traveldreamClient.beans.ComponentiMgrBeanInterface;
import it.traveldreamClient.beans.PacchettiMgrBeanInterface;
import it.traveldreamClient.beans.UserMgr;
import it.traveldreamClient.beans.dto.AlloggioDTO;
import it.traveldreamClient.beans.dto.ComponenteDTO;
import it.traveldreamClient.beans.dto.EscursioneDTO;
import it.traveldreamClient.beans.dto.PkgDTO;
import it.traveldreamClient.beans.dto.TrasportoDTO;
import it.traveldreamClient.beans.dto.VoloDTO;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
 
@ManagedBean(name="browser")
@RequestScoped
public class BrowserManagedBean {
	@EJB
	private PacchettiMgrBeanInterface pkg;
	
	@EJB
	private ComponentiMgrBeanInterface cmp;
	
	@EJB 
	private UserMgr usr;
	
	@EJB
	private ClientManagerInterface mk;
	
	private List<TrasportoDTO>  Trasporto;
	private List<EscursioneDTO> Escursioni;
	private List<AlloggioDTO> Alloggi;
	
	private List<PkgDTO> Pacchetti;
	
	private AlloggioDTO selectedAlloggio;
	private EscursioneDTO selectedEscursione;
	private TrasportoDTO selectedTrasporto;
	
	private ComponenteDTO selectedComponente;
	
	private ComponenteDTO runTimeComponente;
	
	private PkgDTO selectedPacchetto;
	private String str;
	
	//Ricerca+++++++++++++++++++++++++++++++++++++++++
	//Escursione
	String SnomeEsc;
	String SluogoEsc;
	//Trasporto
	String SluogoPartenza;
	String SluogoArrivo;
	Date SdataPartenza;
	//Alloggio
	String SluogoAlloggio;
	Date ScheckIN;
	Date ScheckOUT;
	//Pacchetto
	String SnomePacc;
	String SluogoPacc;
	Date SdataPacc;
	
	
	public BrowserManagedBean() {
		super();
		SnomeEsc=new String();
		SluogoEsc= new String();
		SluogoArrivo =new String();
		SluogoPartenza = new String();
		SdataPartenza = new Date();
		SluogoAlloggio= new String();
		SnomePacc= new String();
		SluogoPacc= new String();
		SdataPacc= new Date();
	}
		
	
	@PostConstruct
	public void init(){
		Trasporto = cmp.getAllTrasporti();
		Escursioni= cmp.getAllEscursioni();
		Alloggi= cmp.getAllAlloggi();
		Pacchetti = pkg.getAllPacchetti();
		
	}

	public List<PkgDTO> getPacchetti() {
		return Pacchetti;
	}

	public void setPacchetti(List<PkgDTO> pacchetti) {
		Pacchetti = pacchetti;
	}

	public List<TrasportoDTO> getTrasporto() {
		return Trasporto;
	}

	public void setTrasporto(List<TrasportoDTO> trasporto) {
		Trasporto = trasporto;
	}

	public List<EscursioneDTO> getEscursioni() {
		return Escursioni;
	}

	public void setEscursioni(List<EscursioneDTO> escursioni) {
		Escursioni = escursioni;
	}

	public List<AlloggioDTO> getAlloggi() {
		return Alloggi;
	}

	public void setAlloggi(List<AlloggioDTO> alloggi) {
		Alloggi = alloggi;
	}

	
	public ComponenteDTO getSelectedComponente() {
		return selectedComponente;
	}

	public void setSelectedComponente(ComponenteDTO selectedComponente) {
		this.selectedComponente = selectedComponente;
	}
	
	
	public ComponenteDTO getRunTimeComponente() {
		return runTimeComponente;
	}

	public void setRunTimeComponente(ComponenteDTO runTimeComponente) {
		this.runTimeComponente = runTimeComponente;
	}

	
	public PkgDTO getSelectedPacchetto() {
		return selectedPacchetto;
	}

	public void setSelectedPacchetto(PkgDTO selectedPacchetto) {
		this.selectedPacchetto = selectedPacchetto;
	}

	public void istanzia(){
		if(selectedComponente instanceof AlloggioDTO)
			runTimeComponente = (AlloggioDTO)selectedComponente;
		else if(selectedComponente instanceof EscursioneDTO)
			runTimeComponente= (EscursioneDTO)selectedComponente;
		else
			runTimeComponente= (TrasportoDTO)selectedComponente;
	}

	public String showCmp(){
		System.out.println("kkkkkkkkkkkkkkkkkkkkkkkkkk"+selectedComponente.toString());

		if(selectedComponente instanceof AlloggioDTO)
			return "/share/viewAlloggio?faces-redirect=true";
		else if(selectedComponente instanceof EscursioneDTO)
			return "/share/viewEscursione?faces-redirect=true";
		else if (selectedComponente instanceof VoloDTO)
			return "/share/viewVolo?faces-redirect=true";
		else
			return "/share/viewComponenteNuovoTipo?faces-redirect=true";
	}
	
	public String showPkg(){
		System.out.println("kkkkkkkkkkkkkkkkkkkkkkkkkk"+selectedPacchetto.toString());
		return "/"+usr.getUrlRole()+"/"+"showPacchetto?faces-redirect=true";
	}

	public AlloggioDTO getSelectedAlloggio() {
		selectedAlloggio = (AlloggioDTO)selectedComponente;
		return selectedAlloggio;
	}

	public void setSelectedAlloggio(AlloggioDTO selectedAlloggio) {
		this.selectedAlloggio = selectedAlloggio;
	}

	public EscursioneDTO getSelectedEscursione() {
		selectedEscursione = (EscursioneDTO)selectedComponente;
		return selectedEscursione;
	}

	public void setSelectedEscursione(EscursioneDTO selectedEscursione) {
		this.selectedEscursione = selectedEscursione;
	}

	public TrasportoDTO getSelectedTrasporto() {
		selectedTrasporto = (TrasportoDTO)selectedComponente;
		return selectedTrasporto;
	}

	public void setSelectedTrasporto(TrasportoDTO selectedTrasporto) {
		this.selectedTrasporto = selectedTrasporto;
	}
	public PacchettiMgrBeanInterface getPkg() {
		return pkg;
	}

	public void setPkg(PacchettiMgrBeanInterface pkg) {
		this.pkg = pkg;
	}

	public ComponentiMgrBeanInterface getCmp() {
		return cmp;
	}

	public void setCmp(ComponentiMgrBeanInterface cmp) {
		this.cmp = cmp;
	}

	public UserMgr getUsr() {
		return usr;
	}

	public void setUsr(UserMgr usr) {
		this.usr = usr;
	}

	public boolean isDes() {
		if(usr.getUrlRole().equals("user"))
			return true;
		else
			return false;
	}

	
	public boolean isElim() {
		if(usr.getUrlRole().equals("user")){
			this.setStr("Compra Componente");
			return true;
		}
		else{
			this.setStr("Elimina Componente");
			return true;
		}
	}
	public String getStr() {
		return str;
	}

	public void setStr(String str) {
		this.str = str;
	}
	
	
	
	public String getSluogoPartenza() {
		return SluogoPartenza;
	}


	public void setSluogoPartenza(String sluogoPartenza) {
		SluogoPartenza = sluogoPartenza;
	}


	public String getSluogoArrivo() {
		return SluogoArrivo;
	}


	public void setSluogoArrivo(String sluogoArrivo) {
		SluogoArrivo = sluogoArrivo;
	}


	public Date getSdataPartenza() {
		return SdataPartenza;
	}


	public void setSdataPartenza(Date sdataPartenza) {
		SdataPartenza = sdataPartenza;
	}

	
	public String getSnomePacc() {
		return SnomePacc;
	}


	public void setSnomePacc(String snomePacc) {
		SnomePacc = snomePacc;
	}


	public String getSluogoPacc() {
		return SluogoPacc;
	}


	public void setSluogoPacc(String sluogoPacc) {
		SluogoPacc = sluogoPacc;
	}


	public Date getSdataPacc() {
		return SdataPacc;
	}


	public void setSdataPacc(Date sdataPacc) {
		SdataPacc = sdataPacc;
	}


	public void searchPacchetti(){
		ArrayList<PkgDTO> uno = new  ArrayList<>();
		ArrayList<PkgDTO> due = new  ArrayList<>();
		ArrayList<PkgDTO> tre = new  ArrayList<>();
		
		for(PkgDTO e: Pacchetti)
			if(e.getAndata().getLuogoDestinazione().contains(SluogoPacc))
				uno.add(e);
		
		for(PkgDTO e: uno)
			if(e.getNome().contains(SnomePacc))
				due.add(e);
		
		if(SdataPacc != null){
			for(PkgDTO e: due)
				if(e.getAndata().getDataPartenza().equals(SdataPacc))
					tre.add(e);
		Pacchetti=tre;
		}
		else
			Pacchetti=due;
		
	}
	
	public void searchAlloggi(){
		ArrayList<AlloggioDTO> uno = new  ArrayList<>();
		ArrayList<AlloggioDTO> due = new  ArrayList<>();
		ArrayList<AlloggioDTO> tre = new  ArrayList<>();
		
		for(AlloggioDTO e: Alloggi)
			if(e.getCitta().contains(SluogoAlloggio))
				uno.add(e);
		
		
		if(ScheckIN == null && ScheckOUT != null){
			for(AlloggioDTO e: uno)
				if(e.getCheckOut().equals(ScheckOUT))
					due.add(e);
					Alloggi=due;
					return;
		}
			
		if(ScheckOUT == null && ScheckIN != null){
			for(AlloggioDTO e: uno)
				if(e.getCheckIn().equals(ScheckIN)){
					due.add(e);
					Alloggi=due;
					return;
				}
			
		}	
			
		if(ScheckIN == null && ScheckOUT ==null){
					Alloggi=uno;
					return;
		}
			
		
		if(ScheckIN != null && ScheckOUT !=null){
			for(AlloggioDTO e: uno)
				if(e.getCheckOut().equals(ScheckOUT))
					due.add(e);
			
			for(AlloggioDTO e: due)
				if(e.getCheckIn().equals(ScheckIN)){
					tre.add(e);
					Alloggi=tre;
					return;
				}
		}
	}
	
	
	
	public void searchTrasporti(){
		ArrayList<TrasportoDTO> uno = new  ArrayList<>();
		ArrayList<TrasportoDTO> due = new  ArrayList<>();
		ArrayList<TrasportoDTO> tre = new  ArrayList<>();
		
		for(TrasportoDTO e: Trasporto)
			if(e.getLuogoPartenza().contains(SluogoPartenza))
				uno.add(e);
		
		for(TrasportoDTO e: uno)
			if(e.getLuogoDestinazione().contains(SluogoArrivo))
				due.add(e);
		
		if(SdataPartenza != null){
			for(TrasportoDTO e: due)
				if(e.getDataPartenza().equals(SdataPartenza))
					tre.add(e);
		Trasporto=tre;
		}
		else
			Trasporto=due;
		
	}
	
	
	public void searchForEscursione(){
		ArrayList<EscursioneDTO> Etmp = new  ArrayList<>();
		ArrayList<EscursioneDTO> due = new  ArrayList<>();
		
		for(EscursioneDTO e: Escursioni)
			if(e.getNome().contains(SnomeEsc))
				Etmp.add(e);
		
		for(EscursioneDTO r: Etmp)
			if(r.getLuogo().contains(SluogoEsc))
				due.add(r);
			
		Escursioni=due;	
	}

	
	
	
	public String getSluogoAlloggio() {
		return SluogoAlloggio;
	}


	public void setSluogoAlloggio(String sluogoAlloggio) {
		SluogoAlloggio = sluogoAlloggio;
	}


	public Date getScheckIN() {
		return ScheckIN;
	}


	public void setScheckIN(Date scheckIN) {
		ScheckIN = scheckIN;
	}


	public Date getScheckOUT() {
		return ScheckOUT;
	}


	public void setScheckOUT(Date scheckOUT) {
		ScheckOUT = scheckOUT;
	}


	public String getSnomeEsc() {
		return SnomeEsc;
	}

	public void setSnomeEsc(String snomeEsc) {
		SnomeEsc = snomeEsc;
	}


	public String getSluogoEsc() {
		return SluogoEsc;
	}


	public void setSluogoEsc(String sluogoEsc) {
		SluogoEsc = sluogoEsc;
	}

	
	
	

}
